在講 DIP 之前先講一下抽象的概念
抽象化是一種拆解、簡化的過程。
舉例來說
我今天晚餐要吃炒飯,如果讓我依賴炒飯,那這樣之後要吃炒麵的話,我就要再依賴炒麵
但如果我們創建一個抽象的食物類別,這個我只要去依賴食物類別就行,等於我要吃食物,那這個炒飯本來就是食物的類別,也就有更好的擴充性
這大概就是抽象的概念
抽象化的概念在實作 functional programing 也有很大的用處,尤其是在寫 pure function 的時候
簡單來說抽象不應該依賴細節。細節應該依賴抽象
高層模組不相依在具體的底層模組實作,應該是反過來,低層模組要依據高層模組規範的抽象來實現,在前期開發時當你需要預留一些彈性時,相依反轉總是一個很好的方向。
所以當高層依賴低層,轉變為低層依賴高層抽象,這就是依賴反轉了,在開發中,如果需求是多變的,那抽象和細節的彼此隔離,會讓程式碼非常容易維護且有彈性。